package cn.mujiankeji.mbrowser.界面.标签页.搜索引擎

import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.PaddingValues
import androidx.compose.foundation.layout.Spacer
import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.layout.height
import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.lazy.LazyColumn
import androidx.compose.foundation.lazy.items
import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.filled.Add
import androidx.compose.material3.Card
import androidx.compose.material3.CircularProgressIndicator
import androidx.compose.material3.FloatingActionButton
import androidx.compose.material3.Icon
import androidx.compose.material3.IconButton
import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.Scaffold
import androidx.compose.material3.Text
import androidx.compose.runtime.Composable
import androidx.compose.runtime.LaunchedEffect
import androidx.compose.runtime.collectAsState
import androidx.compose.runtime.getValue
import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.remember
import androidx.compose.runtime.setValue
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.unit.dp
import cn.mujiankeji.mbrowser.app.应用接口
import cn.mujiankeji.mbrowser.app.应用路由
import cn.mujiankeji.mbrowser.数据.数据库.AppDatabase
import cn.mujiankeji.mbrowser.数据.数据库.DBSearchEngine
import cn.mujiankeji.mbrowser.界面.图标.MyIconPack
import cn.mujiankeji.mbrowser.界面.图标.myiconpack.添加书签
import cn.mujiankeji.mbrowser.界面.标签页.统一标签页布局
import cn.mujiankeji.mbrowser.界面.框架.主视图.标签页状态
import cn.mujiankeji.mbrowser.界面.组件.配置列表.配置行
import kotlinx.coroutines.flow.MutableStateFlow
import org.koin.core.context.GlobalContext

class 搜索引擎管理页面状态 (val db : AppDatabase = GlobalContext.get().get()) : 标签页状态() {
    val 搜索引擎列表 = db.搜索引擎()


    var 选中编辑引擎 by mutableStateOf<DBSearchEngine?>(null)
    override val 标题 = MutableStateFlow<String?>("搜索引擎管理")
    
    // 创建新的搜索引擎并进入编辑模式
    fun 创建新搜索引擎() {

        选中编辑引擎 = null
        搜索引擎编辑状态(db).apply {
            this.当前编辑引擎 = DBSearchEngine()
            this.是新建 = true

            初始化编辑状态()
        }.let {
            应用路由.加载(it)
        }
    }
    
    // 编辑现有搜索引擎
    fun 编辑搜索引擎(引擎: DBSearchEngine) {
        选中编辑引擎 = 引擎

        搜索引擎编辑状态(db).apply {
            this.当前编辑引擎 = 引擎
            this.是新建 = false

            初始化编辑状态()
        }.let {
            应用路由.加载(it)
        }
    }
}

@Composable
fun 搜索引擎管理页面实现(state: 搜索引擎管理页面状态) {
    val 搜索引擎列表 by state.搜索引擎列表.获取所有搜索引擎().collectAsState(initial = emptyList())
    var 加载中 by remember { mutableStateOf(true) }

    LaunchedEffect(搜索引擎列表) {
        加载中 = false
    }

    统一标签页布局(title = {
        state.标题.value ?:""
    },
        action = {
            IconButton({
                state.创建新搜索引擎()
            }) {
                Icon(MyIconPack.添加书签,"")
            }
        })
    {
        Box(Modifier.fillMaxSize()) {
            if (加载中) {
                CircularProgressIndicator(
                    modifier = Modifier.align(Alignment.Center)
                )
            }
            else if (搜索引擎列表.isEmpty()) {
                Text(
                    text = "没有搜索引擎，点击左上角添加",
                    modifier = Modifier.align(Alignment.Center),
                    color = MaterialTheme.colorScheme.onSurfaceVariant
                )
            }
            else {
                LazyColumn(
                    modifier = Modifier.fillMaxSize(),
                    contentPadding = PaddingValues(16.dp)
                ) {
                    items(搜索引擎列表) { 引擎 ->
                        搜索引擎项(引擎) {
                            state.编辑搜索引擎(引擎)
                        }
                        Spacer(modifier = Modifier.height(8.dp))
                    }
                }
            }
        }
    }
}



@Composable
private fun 搜索引擎项(引擎: DBSearchEngine, onClick: () -> Unit) {
    Card(
        modifier = Modifier
            .fillMaxWidth()
    ) {
        Column(
            modifier = Modifier.padding(8.dp)
        ) {
            配置行(
                title = 引擎.名称,
                subtitle = "${引擎.引擎数量}个子引擎"
            ) {
                onClick()
            }
        }
    }
}